/*!
 * @file gfxEnv.hh
 * @brief Obiekt do zarządzania oświetleniem globalnym/kamerą/mgłą itd.
 */

#ifndef __ENGINE_GFX_GFXENV_HH
#define __ENGINE_GFX_GFXENV_HH

#include "engine/pawirr.hh"
#include "engine/basic/shader.hh"
#include "engine/basic/color.hh"
#include "engine/basic/point3f.hh"

/*!
 * @brief Zarządzanie oświetleniem/kamerą/mgłą
 */
class gfxEnv{
public:
	/*!
	 * @brief Konstruktor. Inicjalizacja domyśnymi wartościami
	 * wszystkich zmiennych
	 * @return Obiekt
	 */
	gfxEnv();

	void startLights();
	void stopLights();

	void addEnvUniforms(shader *sh);

	/*!
	 * @brief Położenie kamery
	 */
	point3f cameraPos;

	/*!
	 * @brief Wektor kierunku kamery
	 */
	point3f cameraVec;

	/*!
	 * @brief Zasięg widzenia
	 */
	float visualRange;

	/*!
	 * @brief Kąt widzenia w stopniach
	 */
	float fieldOfView;

	/*!
	 * @brief Źródło rozproszonego światła
	 */
	point3f lightDiffuseSource;

	/*!
	 * @brief Kolor światła rozproszonego
	 */
	color lightDiffuseColor;

	/*!
	 * @brief Kolor światła otaczającego
	 */
	color lightAmbientColor;

	/*!
	 * @brief Kolor mgły
	 */
	color skyColor1;

	/*!
	 * @brief Kolor mgły
	 */
	color skyColor2;

	/*!
	 * @brief Długość mgły, tj. od początku zanikania, do końca
	 */
	float fogLength;

	float waterLevel;

	float gravityAcc;

	float ambientToDiffuseStrength;

private:
};

#else
class gfxEnv;
#endif
